const path = require('path');
const fs = require('fs').promises;//Promise风格API,用于异步操作文件系统。

exports.delFiles = async function (url) {
  try {
    // 检查是否为字符串路径
    if (typeof url === 'string') {
      // 使用path.resolve确保路径正确
      const filePath = path.resolve(__dirname, '..', url);
      // 检查文件是否存在
      try {
        await fs.access(filePath);
      } catch (error) {
        // 文件不存在时只记录警告，不抛出错误
        console.warn(`文件不存在，跳过删除: ${filePath}`);
        return { success: true, message: '文件不存在，已跳过' };
      }
      // 检查是否为文件
      const stats = await fs.stat(filePath);
      if (stats.isDirectory()) {
        throw new Error(`无法删除目录: ${filePath}`);
      }
      await fs.unlink(filePath);
    } 
    return { success: true };
  } catch (err) {
    // 只对目录删除等真正错误的情况抛出异常
    if (err.message.includes('无法删除目录')) {
      console.error('删除文件失败:', err);
      throw err;
    }
    // 其他错误也记录但不抛出，避免影响主流程
    console.error('删除文件失败:', err);
    return { success: false, error: err.message };
  }
}

exports.getDirectorySize = async function (dir) {
  let size = 0;
  try {
    async function calculateSize(dir) {
      for (const d of await fs.readdir(dir,{withFileTypes:true})) {
        const currentPath = path.join(dir, d.name);
        if (d.isDirectory()) {
          await calculateSize(currentPath);
        } else {
          const stats = await fs.stat(currentPath);
          size += stats.size;
        }      
      }
    }
    await calculateSize(dir);
  } catch (error) {
    console.error('计算目录大小失败:', error);
    // 可选择抛出错误让调用方处理
    // throw error;
  }
  return size;
};
